#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
搜索历史相关API
"""

from flask_restful import Resource, reqparse
from flask import request, current_app, g
from app.services.civil_code_service import civil_code_service
from app.utils.response_utils import create_response
from app.middleware.ip_middleware import get_current_user_id, get_current_user_ip

class SearchHistoryAPI(Resource):
    """搜索历史API"""
    
    def get(self):
        """获取搜索历史"""
        try:
            # 解析查询参数
            parser = reqparse.RequestParser()
            parser.add_argument('limit', type=int, default=20, help='返回数量限制', location='args')
            
            args = parser.parse_args()
            
            # 自动从IP中间件获取用户标识
            user_id = get_current_user_id()
            
            # 获取搜索历史
            history = civil_code_service.get_search_history(
                user_id=user_id,
                limit=min(args['limit'], 100)
            )
            
            return create_response(
                success=True,
                data=history,
                message="获取搜索历史成功"
            )
            
        except Exception as e:
            current_app.logger.error(f"获取搜索历史失败: {str(e)}")
            return create_response(
                success=False,
                error={
                    'code': 'SEARCH_HISTORY_ERROR',
                    'message': '获取搜索历史失败',
                    'details': str(e) if current_app.debug else '服务异常'
                },
                status_code=500
            )
    
    def delete(self):
        """清空搜索历史"""
        try:
            # 自动从IP中间件获取用户标识
            user_id = get_current_user_id()
            
            # 清空搜索历史
            success = civil_code_service.clear_search_history(user_id=user_id)
            
            if success:
                return create_response(
                    success=True,
                    message="清空搜索历史成功"
                )
            else:
                return create_response(
                    success=False,
                    error={
                        'code': 'CLEAR_HISTORY_FAILED',
                        'message': '清空搜索历史失败',
                        'details': '操作未成功执行'
                    },
                    status_code=500
                )
                
        except Exception as e:
            current_app.logger.error(f"清空搜索历史失败: {str(e)}")
            return create_response(
                success=False,
                error={
                    'code': 'CLEAR_HISTORY_ERROR',
                    'message': '清空搜索历史失败',
                    'details': str(e) if current_app.debug else '服务异常'
                },
                status_code=500
            )
    
    def post(self):
        """保存搜索历史"""
        try:
            # 解析请求参数
            parser = reqparse.RequestParser()
            parser.add_argument('query', type=str, required=True, help='搜索关键词', location='json')
            parser.add_argument('result_count', type=int, default=0, help='搜索结果数量', location='json')
            
            args = parser.parse_args()
            
            # 自动从IP中间件获取用户标识
            user_id = get_current_user_id()
            user_ip = get_current_user_ip()
            
            # 验证查询参数
            if not args['query'] or len(args['query'].strip()) == 0:
                return create_response(
                    success=False,
                    error={
                        'code': 'INVALID_QUERY',
                        'message': '搜索关键词不能为空',
                        'details': '请提供有效的搜索关键词'
                    },
                    status_code=400
                )
            
            # 限制查询长度
            if len(args['query']) > 100:
                return create_response(
                    success=False,
                    error={
                        'code': 'QUERY_TOO_LONG',
                        'message': '搜索关键词过长',
                        'details': '搜索关键词不能超过100个字符'
                    },
                    status_code=400
                )
            
            # 保存搜索历史
            success = civil_code_service.add_search_history(
                query=args['query'].strip(),
                result_count=max(0, args['result_count']),  # 确保结果数量非负
                user_id=user_id,
                user_ip=user_ip
            )
            
            if success:
                return create_response(
                    success=True,
                    data={
                        'query': args['query'].strip(),
                        'result_count': args['result_count'],
                        'user_id': user_id
                    },
                    message="搜索历史保存成功"
                )
            else:
                return create_response(
                    success=False,
                    error={
                        'code': 'SAVE_HISTORY_FAILED',
                        'message': '保存搜索历史失败',
                        'details': '数据库操作未成功执行'
                    },
                    status_code=500
                )
                
        except Exception as e:
            current_app.logger.error(f"保存搜索历史失败: {str(e)}")
            return create_response(
                success=False,
                error={
                    'code': 'SAVE_HISTORY_ERROR',
                    'message': '保存搜索历史失败',
                    'details': str(e) if current_app.debug else '服务异常'
                },
                status_code=500
            )
